﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.Script.Serialization;
using System.Collections.Generic;
using System.Threading;
using System.Globalization;
using System.Resources;
using System.Xml.Linq;
using XWG.Framework.MSException;
using System.IO;
using System.Xml;
using System.Text;
using System.Collections;
using System.Text.RegularExpressions;
using XWG.Framework.AuthSPConst;
using XWG.Framework.AuthEntity;
using XWG.Framework.AuthUtility;
using XWG.Framework.AuthBLL;
using System.Reflection;
using XWG.Framework.IAuthority;
namespace JWBSTAPP.CommonClass
{

    /// <summary>
    /// PageBases 的摘要说明
    /// </summary>
    public class PageBases : System.Web.UI.Page
    {
        public static string CurrentPageName
        {
            get
            {
                string currentFilePath = HttpContext.Current.Request.FilePath;
                return currentFilePath.Substring(currentFilePath.LastIndexOf("/") + 1); ;
            }
        }

        //查询结果的记录数
        //private double _QResultRowCount = 0;
        //错误信息
        private string _ErrMessage = string.Empty;

        public PageBases()
        {

        }

        protected override void OnPreInit(EventArgs e)
        {
            //检查 IsPostBack 属性来确定是不是第一次处理该页。
            //创建或重新创建动态控件。
            //动态设置主控页。
            //动态设置 Theme 属性。
            //读取或设置配置文件属性值。
            //注意
            //如果请求是回发请求，则控件的值尚未从视图状态还原。如果在此阶段设置控件属性，则其值可能会在下一事件中被重写。
            base.OnPreInit(e);

        }

        //protected virtual void Page_Load(object sender, EventArgs e)
        //{
        //    if (!IsPostBack)
        //    { 

        //    }
        //}
        protected override void OnInit(EventArgs e)
        {
            if (System.Web.HttpContext.Current != null)
            {
                base.OnInit(e);
                //this.Load += new EventHandler(this.BasePage_Load);

                bool isPermission = true;
                //session
                if (string.IsNullOrEmpty(Convert.ToString(Session["UserID"])))
                {
                    isPermission = false;
                }
                if (isPermission == false)
                {
                    Response.Write("<script>alert('登录超时，请重新登录！');parent.parent.parent.location.href='/login.aspx';</script>");

                    Response.End();
                }
            }
        }
        protected override void OnUnload(EventArgs e)
        {
            //该事件首先针对每个控件发生，继而针对该页发生。在控件中，使用该事件对特定控件执行最后清理，如关闭控件特定数据库连接。
            //对于页自身，使用该事件来执行最后清理工作，如：关闭打开的文件和数据库连接，或完成日志记录或其他请求特定任务。
            //注意 
            //在卸载阶段，页及其控件已被呈现，因此无法对响应流做进一步更改。如果尝试调用方法（如 Response.Write 方法），则该页将引发异常。

            base.OnUnload(e);

        }

        /// <summary> 
        /// 客户端按钮可见性验证
        /// </summary> 
        public List<string> ResPermission(string resCode)
        {
            try
            {
                IAuth iauth = new Authority();
                return iauth.ControlPermission(JWBSTAPP.Global.AreaID, resCode, Convert.ToString(Session["UserID"]));
            }
            catch (Exception ex)
            {
                MSEx.DealErr(ex, "");
                return null;
            }
        }
        /// <summary> 
        /// 本页面全部权限控件
        /// </summary> 
        public List<string> Res(string resCode)
        {
            try
            {
                IAuth iauth = new Authority();
                return iauth.ControlAll(JWBSTAPP.Global.AreaID, resCode);

            }
            catch (Exception ex)
            {
                MSEx.DealErr(ex, "");
                return null;
            }

        }
        /// <summary> 
        /// 客户端按钮可见性验证
        /// </summary> 
        public List<string> ControlPermission(string resCode, string controlName)
        {
            try
            {
                return null;
            }
            catch (Exception ex)
            {
                MSEx.DealErr(ex, "");
                return null;
            }

        }
        protected override void OnLoadComplete(EventArgs e)
        {
            base.OnLoadComplete(e);

        }
        protected void BasePage_Load(object sender, System.EventArgs e)
        {
            try
            {
                bool isPermission = false;
                //功能权限验证
                System.Reflection.MemberInfo m = this.GetType().BaseType;//获取继承该基类的子类信息

                if (m.GetType().IsClass == true)//非接口
                {
                    PermissionResourceAttribute att = Attribute.GetCustomAttribute(m, typeof(PermissionResourceAttribute)) as PermissionResourceAttribute;//初始化该子类的attribute信息
                    if (att != null)
                    {
                        //权限验证
                        isPermission = att.check();
                        if (isPermission == true)
                        {
                            List<string> list = new List<string>();
                            list = ResPermission(att.ResCode);
                            List<string> listAll = new List<string>();
                            listAll = Res(att.ResCode);
                            //控件级权限验证
                            foreach (Control c in Page.Controls)
                            {
                                if (listAll != null && listAll.Count > 0)
                                {
                                    for (int j = 0; j < listAll.Count; j++)
                                    {
                                        if (c.UniqueID == listAll[j]) //具有权限
                                        {
                                            c.Visible = false;
                                            break;
                                        }
                                    }
                                }
                            }
                            foreach (Control c in Page.Controls)
                            {
                                if (list != null && list.Count > 0)
                                {
                                    for (int i = 0; i < list.Count; i++)
                                    {
                                        if (c.UniqueID == list[i]) //具有权限
                                        {
                                            c.Visible = true;
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                        else //无权限跳转
                        {
                            Response.Write("<script>alert('你没有权限访问请求的页面！');window.parent.tb_remove();</script>");
                            Response.End();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //MSEx.DealErr(ex, "");
            }
        }
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

        }
    }
}
